<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page import="java.io.InputStream"%>
<%@ page import="java.io.FileInputStream"%>
<%@ page import="org.apache.commons.codec.digest.DigestUtils"%>
<%@ page import="com.jspsmart.upload.Request"%>
<%@ page import="com.softeem.sss.dao.FileInfoDAO"%>
<%@ page import="com.softeem.sss.dto.FileInfo"%>
<%@ page import="com.jspsmart.upload.Files"%>
<%@ page import="java.io.File"%>
<%@ page import="com.softeem.sss.dto.User"%>
<%@ page import="com.jspsmart.upload.SmartUpload"%>
<%@ include file="doCheckSession.jsp" %>
<%
	/*
		如果将表单的enctype设置为multipart/form-data之后，表单数据无法通过正常
		的request对象获取
	*/
	//设置请求编码
	request.setCharacterEncoding("utf-8");

	//创建一个用于上传文件的组件对象
	SmartUpload su = new SmartUpload();
	//初始化
	su.initialize(pageContext);

	//设置允许上传的文件最大限制
	su.setMaxFileSize(1024 * 1024 * 50);
	//设置不允许上传的文件类型
	su.setDeniedFilesList("exe,bat,dll");
	//上传
	su.upload();

	//获取上传文件应该存储在服务器的路径
	String basePath = request.getServletContext().getRealPath("sources");
	//如果两个用户上传了同名但是内容不同的文件，如何解决冲突（思路:可以使用用户名作为子文件夹）
	User user = (User) obj;
	basePath = basePath + File.separator + user.getUsername();
	System.out.println(basePath);
	//判断当前目录是否存在，若不存在，则创建
	File dir = new File(basePath);
	if (!dir.exists()) {
		//创建
		if (dir.mkdirs())
			System.out.println("目录创建成功!");
	}
	//获取上传过来的文件
	Files files = su.getFiles();
	long size = files.getSize(); //文件大小
	if (size <= 0) {
		//未上传文件
		request.setAttribute("msg", "请选择文件");
		request.getRequestDispatcher("upload.jsp").forward(request, response);
	} else {
		//存储文件到服务器
		com.jspsmart.upload.File targetFile = files.getFile(0);
		String fname = targetFile.getFileName();
		String fpath = basePath + File.separator + fname;
		targetFile.saveAs(fpath);

		//获取文件的md5值
		InputStream is = new FileInputStream(fpath);
		String md5 = DigestUtils.md5Hex(is);//md5
		//关闭资源
		is.close();
		FileInfoDAO fdao = new FileInfoDAO();
		FileInfo fi = fdao.findByMD5(md5);
		//检查文件是否重复上传
		if (fi != null) {
			//删除服务器中文件
			boolean b = new File(fpath).delete();
			request.setAttribute("msg", "该文件已存在,请检查");
			request.getRequestDispatcher("upload.jsp").forward(request, response);
			return;
		}

		//将文件信息存储到数据库
		FileInfo fileInfo = new FileInfo();
		Request req = su.getRequest();
		fname = req.getParameter("fname"); //文件名
		String jifen = req.getParameter("integral");
		int integral = Integer.parseInt(jifen); //积分
		String tags = req.getParameter("tags"); //标签
		String summary = req.getParameter("summary"); //简介
		System.out.println("文件名称:"+fname);
		//文件存储的相对路径
		fpath = user.getUsername() + File.separator + targetFile.getFileName();//路径

		fileInfo.setFname(fname);
		fileInfo.setSize(size);
		fileInfo.setMd5(md5);
		fileInfo.setTags(tags);
		fileInfo.setSummary(summary);
		fileInfo.setSaleIntergral(integral);
		fileInfo.setUid(user.getUid());
		fileInfo.setPath(fpath);
		
		boolean result = fdao.insert(fileInfo);
		if (result) {
			//成功
			response.sendRedirect("doList.jsp");
		} else {
			//失败
			request.setAttribute("msg", "未知异常,上传失败");
			request.getRequestDispatcher("upload.jsp").forward(request, response);
		}
	}
%>